package com.liu.operate.controller;


import cn.dev33.satoken.stp.StpUtil;
import com.liu.common.controller.CommonController;
import com.liu.common.entity.R;
import com.liu.common.entity.enums.PermissionEnum;
import com.liu.operate.entity.base.OperateInfo;
import com.liu.operate.entity.qo.OperateInfoDTO;
import com.liu.operate.service.IOperateInfoService;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 操作信息表 前端控制器
 * </p>
 *
 * @author LiuChengLong
 * @since 2022-10-21
 */
@RestController
@RequestMapping("/operate/operateInfo")
public class OperateInfoController extends CommonController {

    @Resource
    private IOperateInfoService operateInfoService;

    /**
     * 新增游戏操作
     * @param operateInfoDTO 操作信息
     * @return R
     */
    @PostMapping("/addOperate")
    public R<T> addOperate(@RequestBody OperateInfoDTO operateInfoDTO){
        boolean hasPermission = StpUtil.hasPermissionOr(PermissionEnum.ADD_OPERATE.getCode(), PermissionEnum.IS_ADMIN.getCode());
        if (hasPermission){
            operateInfoDTO.setCreateBy(super.getUserId());
            operateInfoService.addOperate(operateInfoDTO);
            return R.success();
        }
        return R.failed();
    }

    /**
     * 修改操作信息
     * @param operateInfoDTO 操作信息
     * @return R
     */
    @PostMapping("/updateOperate")
    public R<T> updateOperate(@RequestBody OperateInfoDTO operateInfoDTO){
        boolean hasPermission = StpUtil.hasPermissionOr(PermissionEnum.UPDATE_OPERATE.getCode(), PermissionEnum.IS_ADMIN.getCode());
        if (hasPermission){
            operateInfoDTO.setUpdateBy(this.getUserId());
            operateInfoService.updateOperate(operateInfoDTO);
            return R.success();
        }
        return R.failed();
    }

    /**
     * 查询全部操作信息
     * @return R
     */
    @PostMapping("/getOperateInfoList")
    public R<List<OperateInfoDTO>> getOperateInfoList(){
        List<OperateInfoDTO> operateInfoList = operateInfoService.getOperateInfoList();
        return R.success(operateInfoList);
    }

    /**
     * 获取所有npc事件
     * @return npc事件
     */
    @GetMapping("/getNpcOperateInfo")
    public R<List<OperateInfoDTO>> getNpcOperateInfo(){
        List<OperateInfoDTO> npcOperateInfoList = operateInfoService.getNpcOperateInfo();
        return R.success(npcOperateInfoList);
    }

    /**
     * 获取随机两个事件
     * @return 事件信息
     */
    @GetMapping("/getRandomOperate")
    public R<List<OperateInfo>> getRandomOperate(){
        List<OperateInfo> randomOperateList = operateInfoService.getRandomOperate();
        return R.success(randomOperateList);
    }
}

